package com.zkh.myframe.server.tomcat.websocket;

import java.util.List;

/**
 * 会话池接口
 * @author zkh
 */
public interface SessionPool {
	
	/**
	 * 获取指定分支连接数
	 * @param branchId 分支编号
	 */
	public int getOnlineCount(String branchId);
	
	/**
	 * 指定分支连接数加1
	 * @param branchId 分支编号
	 */
	public int addOnlineCount(String branchId);
	
	/**
	 * 指定分支连接数减1
	 * @param branchId 分支编号
	 */
	public int subtractOnlineCount(String branchId);
	
	/**
	 * 保存WebSocket连接
	 * @param branchId 分支编号
	 * @param userKey 用户标识
	 * @param webSocketCore WebSocket连接
	 */
	public void saveSocket(String branchId, String userKey, WebSocketCore webSocketCore);
	
	/**
	 * 移除WebSocket连接
	 * @param branchId 分支编号
	 * @param userKey 用户标识
	 * @param webSocketCore WebSocket连接
	 * @return 返回被移除的会话
	 */
	public WebSocketCore removeSocket(String branchId, String userKey, WebSocketCore webSocketCore);
	
	/**
	 * 获取一个WebSocket连接。如果返回对象为null，说明用户不在线
	 * @param branchId 分支编号
	 * @param userKey 用户标识
	 */
	public WebSocketCore getWebSocketSession(String branchId, String userKey);
	
	/**
	 * 获取多个WebSocket连接。如果返回列表的项为null，说明用户不在线
	 * @param branchId 分支编号
	 * @param userKeyList 用户标识列表
	 * @param offlineUserList 离线用户列表。如果不需要获取离线用户，直接传null即可
	 */
	public List<WebSocketCore> getWebSocketSessions(String branchId, List<String> userKeyList, List<String> offlineUserList);
}
